Developers face significant challenge in developing and managing software applications when dealing with the complexity of wide diversity among platforms, tools, technologies, and underlying devices. This diversity has to be managed during all phases of a software product cycle, including design, development, build, testing, deployment, monitoring and management. Furthermore, mobile devices differ in hardware as well as in the platform support (iOS™ vs. Android™ vs. Windows™). Internet of Things (IoT) devices vary significantly in the amount of resources (i.e., memory, power, CPU, etc.), and often require special low-level development tools. Different platforms have different technologies, configuration, and computational models, and application programming interfaces (APIs). Building an application for a wide spectrum of platforms, devices and technologies often means rewriting a large portion of the application code using different programming languages (C, Java, Objective-C, HTML, JavaScript), tools, libraries, and platform support. This results in high development and management cost, inconsistent and poor product experience across devices, and low software quality. As variability increases, the process of developing, testing, deploying and distributing software across these devices becomes increasing more complex. Further, as changes occur in applications or the underlying software, managing and distributing those changes to different platforms become even harder.
Embodiments described herein present methods for developing, building, deploying, testing, and managing software applications. The methods for building platform-independent software described herein involve adding a set of conditional abstractions as part of programming language constructs for a new programming language, and adding a set of tools that take applications written in this language as input, and that perform syntax and semantic analysis, compose application components, generate binary code, distribute and install code on devices, and manage changes in software applications.